<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Usuario extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('act_model');
        $this->load->model('funciones_model');
        $this->load->model('user_model');
        $this->load->model('log_model');
        $this->load->helper('url');
        $this->load->helper('form');
        $this->load->library('session');
        $this->load->library('encrypt');
    }

    /* Lleva a la vista de registrar usuario. */

    function goRegistrar() {
        $this->load->view('registroInicio');
    }

    /* Lleva a la vista de login. */

    public function goLogin($msg = NULL) {
        $data['msg'] = $msg;
        $this->load->view('login', $data);
    }

    /* Login */

    public function submit() {
        // Obtenemos los campos del formulario
        $uname = $this->input->post('username');
        $pwd = $this->input->post('password');

        // Cargamos el modelo que se encarga de esta interaccion
        $this->load->model('user_model');
        $existe = $this->user_model->login($uname, $pwd);

        // Si existe el usuario , determinara si carga la vista de administrador
        // o si carga la vista de un usuario normal
        if ($existe == TRUE) {

            $this->log_model->usuarioInicioSesion($uname);
            $EsAdmin = $this->funciones_model->esAdmin($uname);
            if ($EsAdmin == TRUE) {
                $this->funciones_model->goParedAdmin();
            } else {

                $EstaHabilitado = $this->user_model->esHab($uname);

                if ($EstaHabilitado == TRUE) {
                    $regCompleto = $this->user_model->registroCompleto($uname);

                    if ($regCompleto == FALSE) {
                        $this->load->view('CompletarRegistro');
                    } else {
                        $this->funciones_model->goParedUsuario();
                    }
                } else {
                    echo $EstaHabilitado;
                    $this->funciones_model->goParedUsuarioDeshabilitado();
                }
            }
        } else {
            // Si no existe el usuario muestra un mensaje
            $msg = '<font color=red>Datos inválidos : email y/o password.</font><br />';
            $this->load->helper('url');
            $this->goLogin($msg);
        }
    }

    // Metodo que permite volver al home del usuario, cargando el 
    // listado de pizarras asociadas
    public function goCargarHome() {
        $uname = $this->session->userdata('email');
        $EsAdmin = $this->funciones_model->esAdmin($uname);
        if ($EsAdmin == TRUE) {
            $this->funciones_model->goParedAdmin();
        } else {
            $this->funciones_model->goParedUsuario();
        }
    }

    // Funcion que se encarga de registrar un usuario, obteniendo los datos
    // del formulario y enviandosela al modelo.
    public function registrar() {
        $this->load->helper('form');
        $usuario = $this->input->post('username');
        $this->log_model->usuarioRegistro($usuario);
        $datos = array(
            'email' => $usuario,
            'password' => $this->input->post('password'),
            'alias' => $this->input->post('alias'),
            'nombres' => $this->input->post('nombre'),
            'apellidos' => $this->input->post('apellido'),
            'fecha_nacimiento' => $this->input->post('fecha_nacimiento'),
            'direccion' => $this->input->post('direccion'),
            'idioma_sistema' => $this->input->post('idioma'),
            'registro_completo' => '1'
        );

        $this->user_model->agregar($this->input->post('username'), $datos);
        $this->load->view('principal');
    }

    /* Lleva a la vista de configurar cuenta de usuario. */

    public function goConfigurarCuenta() {
        $usuario = $this->session->userdata('email');
        $this->db->select('*');
        $this->db->from('usuario as u');
        $this->db->where('u.email = ', $usuario);
        $data['query'] = $this->db->get();

        $this->load->view('configurarCuenta', $data);
    }

    // Metodo que modifica la informacion del usuario que se encuentra logueado
    public function modificar() {
        $this->load->helper('form');
        // Obtenemos los datos desde el usuario del formulario y de la sesion
        $email = $this->session->userdata('email');
        $password = $this->input->post('password');
        $alias = $this->input->post('alias');
        $nombres = $this->input->post('nombre');
        $apellidos = $this->input->post('apellido');
        $fecha_nacimiento = $this->input->post('fecha_nacimiento');
        $direccion = $this->input->post('direccion');
        $idioma_sistema = $this->input->post('idioma');
        $registro_completo = '1';

        //Le enviamos los datos al modelo
        $this->load->model('user_model');
        $this->user_model->modificar($email, $password, $alias, $nombres, $apellidos, $fecha_nacimiento, $direccion, $idioma_sistema, $registro_completo);

        $this->log_model->usuarioModificoSusDatos($email);
        // Dependiendo del tipo de usuario que sea, lo dirigimos a su vista
        if ($this->funciones_model->esAdmin($email) == TRUE) {
            $this->funciones_model->goParedAdmin();
        } else {
            $this->funciones_model->goParedUsuario();
        }
    }

    // Metodo que define el registro de un invitado, donde los unicos campos
    // que se llenan son email y password
    public function registrarInvitado() {
        $this->load->helper('form');
        $datos = array(
            'email' => $this->input->post('email'),
            'password' => $this->input->post('password')
        );

        $this->db->insert('usuario', $datos);
        $this->load->helper('url');

        $this->load->library('email');
        $this->load->library('form_validation');

        $this->form_validation->set_rules('email', 'required');

        if ($this->form_validation->run() == FALSE) {
            echo 'Debe introducir un email para realizar la solicitud';
        } else {

            $user = $this->input->post('email');
            $pass = $this->input->post('password');
            $coment = $this->input->post('comentarios');
            $this->email->initialize();
            $this->email->from('taskboardusb@gmail.com', 'TaskBoardUSB -  Invitacion de creacion de cuenta');
            $this->email->to($user);
            $this->email->subject('TaskBoardUSB -  Invitacion de creacion de cuenta');
            $message = 'Invitacion de creacion de cuenta : ' . "\n\n\n";
            $message .= $coment . "\n";
            $message .= "\n";
            $message .= 'Debe ingresar al sistema y culminar su registro . Los datos que le fueron asignados son:' . "\n\n";
            $message .= '--> Username es :' . $user . "\n";
            $message .= '-->Contrasena :' . $pass . "\n\n\n";
            $message .= ' Bienvenido a TaskBoard!, te estamos esperando.';

            $this->email->message($message);

            $this->email->send();
        }

        if ($this->funciones_model->esAdmin() == TRUE) {
            $this->funciones_model->goParedAdmin();
        } else {
            $this->funciones_model->goParedUsuario();
        }
    }

    function goSalir() {
        
        $this->log_model->usuarioCerroSesion($this->session->userdata('email'));
        $this->session->sess_destroy();
        $this->load->view('principal');
    }

}

?>